package com.vehicle.mapper;

import com.vehicle.domains.bo.QueryCameraBo;
import com.vehicle.domains.entity.CameraEntity;

import java.util.List;

/**
 * 相机设备Mapper接口
 * 处理相机设备的新增、查询、更新、删除等操作
 */
public interface CameraMapper {

    /**
     * 新增相机设备
     * @param cameraEntity 相机设备实体（包含设备核心信息）
     * @return 影响行数（1：成功，0：失败）
     */
    int insertCamera(CameraEntity cameraEntity);

    /**
     * 根据ID查询相机设备详情
     * @param id 相机设备ID
     * @return 相机设备实体（无数据则返回null）
     */
    CameraEntity selectCameraById(Long id);

    /**
     * 根据相机编码查询设备（用于编码唯一性校验）
     * @param cameraCode 相机编码（如：CAM-2023001）
     * @return 相机设备实体（无数据则返回null）
     */
    CameraEntity selectCameraByCode(String cameraCode);

    /**
     * 根据相机IP查询设备（用于IP唯一性校验）
     * @param cameraIp 相机IP地址（如：192.168.1.10）
     * @return 相机设备实体（无数据则返回null）
     */
    CameraEntity selectCameraByIp(String cameraIp);

    /**
     * 条件查询相机设备列表
     * @param queryCameraBo 查询条件（非空字段作为筛选条件）
     * @return 符合条件的相机设备列表（无数据则返回空列表）
     */
    List<CameraEntity> selectCameraList(QueryCameraBo queryCameraBo);

    /**
     * 选择性更新相机设备信息（仅更新非空字段）
     * @param cameraEntity 相机设备实体（需包含id，其他字段非空则更新）
     * @return 影响行数（1：成功，0：失败或无变更）
     */
    int updateCameraSelective(CameraEntity cameraEntity);

    /**
     * 根据ID删除相机设备
     * @param id 相机设备ID
     * @return 影响行数（1：成功，0：失败）
     */
    int deleteCameraById(Long id);

    /**
     * 批量删除相机设备（根据ID列表）
     * @param ids 相机设备ID列表
     * @return 影响行数（成功删除的设备数量）
     */
    int batchDeleteCameras(List<Long> ids);

    /**
     * 根据关联id查询
     */
    List<CameraEntity> queryByAssociationCameraId(Long id);

    int unBindCamera(Long  id);

    CameraEntity getCameraByIp(String ip);
}
